import pandas as pd
import os
from collections import defaultdict

# 设置目录路径，这里假设所有的xlsx文件都在当前目录下的data文件夹中
directory_path = 'data'

# 使用defaultdict来存储身份证号及其对应的姓名和出现次数
id_info = defaultdict(lambda: {"姓名": None, "出现次数": 0})

# 遍历目录下的所有xlsx文件
for file_name in os.listdir(directory_path):
    if file_name.endswith('.xlsx'):
        # 构建完整的文件路径
        file_path = os.path.join(directory_path, file_name)

        # 读取xlsx文件
        df = pd.read_excel(file_path)

        # 假设身份证号和姓名在名为'身份证号'和'姓名'的列中
        id_column_name = '身份证'
        name_column_name = '姓名'

        # 如果列存在，则更新计数器和姓名
        if id_column_name in df.columns and name_column_name in df.columns:
            for index, row in df.iterrows():
                id_number = row[id_column_name]
                name = row[name_column_name]
                if pd.notna(id_number) and pd.notna(name):  # 确保身份证号和姓名都不是NaN
                    id_info[id_number]["姓名"] = name  # 假设每个身份证号对应的姓名是唯一的
                    id_info[id_number]["出现次数"] += 1
        else:
            print(f'在文件 {file_name} 中未找到名为"{id_column_name}"或"{name_column_name}"的列。')

# 将结果转换为DataFrame
result_df = pd.DataFrame.from_dict(id_info, orient='index').reset_index()
result_df.columns = ['身份证', '姓名', '出现次数']

# 保存新的DataFrame为xlsx文件
output_file_name = '身份证与姓名出现次数统计.xlsx'
result_df.to_excel(output_file_name, index=False)

print(f'统计完成，结果已保存到 {output_file_name}')
